
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "createIdent.h"
#define ASCII_ZERO 0x30

void formeString(char *buffer, int cpt) ;
int checkLastEntry(FILE *file, fpos_t pos, int position);
void removeLastEntry(FILE *sourceFile,int size);

int main(void)
{
	char input[40], buffer[30], car;
	int cpt=0,size, sizeErreur, position,i;
	fpos_t pos;
	FILE *identFile = fopen("../kernel/ident.txt","r+");

	if (identFile != NULL)
	{
		fseek(identFile, 0, SEEK_END);			// fin
		size = ftell(identFile);
		fseek(identFile, 0, SEEK_SET);			// debut
		
		while (ftell(identFile) < size)
		{
			while (fgetc(identFile) != '\n');
				cpt++;
			if (ftell(identFile) ==  size)
				break;
		}
		fgetpos(identFile,&pos);				// sauvegarde du pointeur de fichier pour vérification
		position = ftell(identFile);
		formeString(buffer,cpt);
		insertName(identFile,input,buffer);
		
		if (!checkLastEntry(identFile,pos,position))
			removeLastEntry(identFile,size);
		else		
			fclose(identFile);
	}
	else
	{
		printf("Error !!! Use createIdent.o first\n");
		return -1;
	}
	return 0;
}

/*
*	Enlève la dernière entrée
*/
void removeLastEntry(FILE *sourceFile,int size)
{
	char car;
	FILE *file = fopen("file.txt","w");
	fseek(sourceFile, 0, SEEK_SET);			
	do
	{
		car =  fgetc(sourceFile);				// copie fichier original dans un temporaire
		fputc(car,file);
		size--;
	}
	while(size > 0);		
	fclose(file);
	fclose(sourceFile);
	system("mv file.txt ../kernel/ident.txt"); 	// fichier remplacer
}

/*
* Une chaîne est formée pour la demande d'un nouvel utilisateur
*/
void formeString(char *buffer, int cpt) 
{
	buffer[0] = 'U'; buffer[1] = 'S'; buffer[2] = 'E'; buffer[3] = 'R'; buffer[4] = ' ';
	if (cpt < 10) 
	{
		buffer[5] = cpt + ASCII_ZERO; buffer[6] = ' '; 	buffer[7] = 0;
	}
	else if ((cpt >= 10) & (cpt<= 99))
	{
		buffer[5] = cpt/10 + ASCII_ZERO; buffer[6] = cpt - (cpt/10)*10 + ASCII_ZERO; 
		buffer[7] = ' '; 	buffer[8] = 0;
	}
	else
	{
		buffer[5] = cpt/100 + ASCII_ZERO; buffer[6] = (cpt-(cpt/100)*100)/10 + ASCII_ZERO; 
		buffer[7] =  cpt - (((cpt/100)*100) - ((cpt - ((cpt/100)*100))/10) *10)  + ASCII_ZERO;
		buffer[8] = ' '; 	buffer[9] = 0;
	}
}	

/*
*	Vérifie que le dernière entrée n'est pas déjà dans le fichier
*/
int checkLastEntry(FILE *file, fpos_t posLastEntry, int position) 
{
	char car=0, lastEntry[40], oldEntry[40];
	int i=0, currentPosition;
	fpos_t currentPos;
	fsetpos(file,&posLastEntry);
	while (car != ' ') 						// récupère le dernier login entrée
	{					
		car = fgetc(file);
		lastEntry[i++] = car; 
	}
	lastEntry[i] = 0;

	fseek(file, 0, SEEK_SET);				// parcours du fichier pour trouver toute les login
	do										// si la dernière entrée est trouvé alors il a conflit
	{
		i=0; car =0;
		while (car != ' ') {
			car = fgetc(file);
			oldEntry[i++] = car; 
		}
		oldEntry[i] =0;
		if (!strcmp(oldEntry,lastEntry))
		{
			printf("Error : %s already exist !!!\n",lastEntry);
			return 0;						// 2 noms identiques
		} 
		while (car != '\n') 
			car = fgetc(file);
		currentPosition = ftell(file);		 
	}	
	while(currentPosition < position);
	return 1;	
}
